#自定义序列化器,添加校验规则
from rest_framework import exceptions, request
from rest_framework.serializers import ModelSerializer
from api.models import User, Employee


#序列化User,全部字段进行序列化
class UserModelSerializer(ModelSerializer):
    class Meta:
        model=User
        fields="__all__"

#添加校验规则
        extra_kwargs={
            "name":{
                "required":True,   #姓名不为空
                "error_messages":{
                    "required":"用户名不为空"   #对上面信息的详细显示
                }
            },
            "password":{
                "required":True,   #密码不为空
                "min_length":2,    #密码最小长度2
                "max_length":16,   #密码最大长度16
                "error_messages":{
                    "required":"密码不为空",
                    "min_length":"密码不能少于2位,请重新输入",
                    "max_length":"密码不能超过16位,请重新输入"
                }
            }
        }

#序列化

#使用钩子进行用户名重复和密码相同的校验--注册
    def validate(self, attrs):
        print(self)
        print(attrs)
        name=attrs.get("name")
            #此时的密码有一项没有入库,所以需要从view的post里面传值过来给序列化器
        request =self.context.get("request")
        password1=request.data["password1"]  #通过接受view传过来的值,进行密码校验
        password = attrs.get('password')
        print('打印一下两次的密码看看')
        print(password, type(password))
        print(password1, type(password1))
        print('333333333333333')
        #用户名重复校验,用户名重复直接返回用户名存在,否则再进一步进行密码重复的校验,
        user=User.objects.filter(u_name=name).first()
        print(user)
        if user:
            raise exceptions.ValidationError('用户名已存在')

        else:
            if int(password) != int(password1):
                raise   exceptions.ValidationError('两次密码不一致')
            return attrs

#序列化Employee
class EmployeerModelSerializer(ModelSerializer):
    class Meta:
        model=Employee
        fields="__all__"

#添加校验规则
        extra_kwargs={
            "name":{
                "required":True,   #姓名不为空
                "error_messages":{
                    "required":"用户名不为空"   #对上面信息的详细显示
                }
            },


        }



